/**
 *
 * sql时间转换为字符串（时间精确到年月日） 将Sql时间戳转换为字符串（时间精确到年月日时分秒） 将字符串转换为sql时间（时间精确到年月日）
 * 将字符串转换为Sql时间戳（时间精确到年月日时分秒） 将util时间转换为sql时间 将util时间转换为字符串，一个例子："yyyy-MM-dd
 * HH:mm:ss" 将时间转化为util时间 获取当前日期为日期型 获取当前日期为字符串 按格式转换日期的格式到固定格式的时间 将固定格式字符串转化为日期
 * 为 sql 里直接通过result.getObject获取日期型变量准备的方法. 取得与原日期相差一定月数的日期，返回Date型日期
 * 取得与原日期相差一定天数的日期，返回String型日期 将日期型的对象进行运算 计算某天所在月的第一天 计算某天所在月的最后一天
 * 得到两个日期之间相差的天数 根据日期得出当前周在当月的第几周 根据日期得出当前周在当年的第几周
 *
 */
package com.agile.springboot.utils;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;


public class DateUtil {

	public static DateUtil dateUtil = null;

	public static final SimpleDateFormat dateFormat = new SimpleDateFormat(
			"yyyy-MM-dd HH:mm:ss");
	private static final SimpleDateFormat shortSdf = new SimpleDateFormat("yyyy-MM-dd");

	private static final Log log = LogFactory.getLog(DateUtil.class);

	public static final String DEF_DATE_FORMAT_STR = "yyyy-MM-dd HH:mm:ss";

	static {
        dateUtil = getInstance();
	}

	/**
	 *
	 * 获得唯一的实例
	 *
	 * @return DateUtils
	 */

	public static DateUtil getInstance() {
		if (dateUtil == null) {
            dateUtil = new DateUtil();
		}
		return dateUtil;
	}



	/**
	 * 将字符串转换为Sql时间戳（时间精确到年月日时分秒）
	 *
	 * @param inStr
	 * @param pattern
	 * @return Timestamp
	 */
	public static java.sql.Timestamp stringToSqlTimestamp(String inStr,
                                                          String pattern) {

		if (inStr == null) {
			return null;
		}
		java.sql.Timestamp tTime = null;
		try {
			SimpleDateFormat sdf = new SimpleDateFormat(pattern);
			Date tmpDate = sdf.parse(inStr, new ParsePosition(0));
            tTime = new java.sql.Timestamp(tmpDate.getTime());
		} catch (Exception exp) {
			log.error(exp.getMessage());
		}
		return tTime;
	}


	/**
	 * 将util时间转换为字符串，一个例子："yyyy-MM-dd HH:mm:ss"
	 *
	 * @param inDate
	 * @param pattern
	 * @return String
	 */
	public static String dateToString(Date inDate, String pattern) {

		SimpleDateFormat sdf = new SimpleDateFormat(pattern);
		String date = sdf.format(inDate);
		return date;
	}

	/**
	 * 获取当前日期为日期型
	 *
	 * @return
	 */
	public static Date getCurrentDate() {

		Calendar cal = Calendar.getInstance();
		Date date = cal.getTime();
		return date;
	}


	/**
	 * 获取当前时间
	 * @return
	 */
	public final static Date getCreateTime(){
		String date = dateToString(new Date(),
                DEF_DATE_FORMAT_STR);
		Date dateDate = stringToSqlTimestamp(date,DEF_DATE_FORMAT_STR);
		return dateDate;
	}

}
